package Reeks5.VanRansbeeck.Kevin.Model;

import Reeks5.VanRansbeeck.Kevin.Model.States.Game.BlindState;
import Reeks5.VanRansbeeck.Kevin.Model.States.Game.FlopState;
import Reeks5.VanRansbeeck.Kevin.Model.States.Game.RiverState;
import Reeks5.VanRansbeeck.Kevin.Model.States.Player.BetState;
import Reeks5.VanRansbeeck.Kevin.Model.States.Player.RaiseState;
import java.util.ArrayList;

public class PokerSpel extends Spel {
    PokerSpeler dealer;
    
    public PokerSpel() {
        super(true);
    }

    @Override
    public void addSpeler(Speler s) {
        if(s instanceof PokerSpeler) {
            this.spelers.add(s);
        }
    }

    @Override
    void setTafel() {
        this.tafel = new ArrayList<Kaart>(5);
    }
    
    public void drawFlop() {
        if(this.getSpelContext().getSpelState() instanceof BlindState) {
            this.drawKaart();
            this.drawKaart();
            this.drawKaart();
            this.getSpelContext().flop();
            setChanged();
            notifyObservers("Flop");
        }
    }
    public void drawTurn() { // checks & states
        if(this.getSpelContext().getSpelState() instanceof FlopState) {
            this.drawKaart();
            this.getSpelContext().turn();
            setChanged();
            notifyObservers("Turn");
        }
    }
    public void drawRiver() { // checks & states
        if(this.getSpelContext().getSpelState() instanceof RiverState) {
            this.drawKaart();
            this.getSpelContext().turn();
            setChanged();
            notifyObservers("River");
        }
    }
    
    public void blinds() {
        boolean ok = true;
        for(Speler s : this.getSpelers()) {
            if(s.getHolekaarten().size() != 2) {
                ok = false;
            }
        }
        if(ok == true) {
            this.getSpelContext().blinds();
        }
    }
    
    public boolean hasRaised() {
        // return true als er een speler is die geraised heeft
        boolean raise = false;
        for(Speler s : getSpelers()) {
            if(s.getStateContext().getStatus() instanceof RaiseState) {
                raise = true;
            }
        }
        return raise;
    }
    public boolean hasBet() {
        // return true als er een speler is die gebet heeft
        boolean bet = false;
        for(Speler s : getSpelers()) {
            if(s.getStateContext().getStatus() instanceof BetState) {
                bet = true;
            }
        }
        return bet;
    }
}
